From f728f3338214024471a52b188a2affe0cf7a2f04 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 15 Nov 2016 22:39:26 +0100 Subject: [PATCH] container: ensure we only append a single node The snapshot vfuncs must only append at most a single node, otherwise things are going to break if the widget is the root node. Unfortunately there is no code that can check this in a generic fashion, so we'll have to debug this on a case-by-case basis. --- gtk/gtkcontainer.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 629eda1865..767cc5ae31 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -3095,10 +3095,21 @@ gtk_container_snapshot (GtkWidget *widget, GtkSnapshot *snapshot) { GtkContainer *container = GTK_CONTAINER (widget); - + GtkAllocation allocation, clip; + graphene_rect_t bounds; + + gtk_widget_get_clip (widget, &clip); + gtk_widget_get_allocation (widget, &allocation); + graphene_rect_init (&bounds, + clip.x - allocation.x, clip.y - allocation.y, + clip.width, clip.height); + gtk_snapshot_push (snapshot, &bounds, "Children<%s>", G_OBJECT_TYPE_NAME (container)); + gtk_container_forall (container, gtk_container_snapshot_forall, snapshot); + + gtk_snapshot_pop (snapshot); } static void -- 2.30.2